<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        const p1 = new Promise((resolve,reject) =>{
            try{
                console.log("开始请求A...");
                // throw new Error("网络出现问题!!!")
                setTimeout(() => {
                    console.log("数据请求成功");
                    resolve({
                        token:"hskahdoqwhdlkash"
                    })
                }, 3000);
            }
            catch (e){
                reject(e.message)
            }
        })

        /*
        Promise的then方法
            -then方法是同步绑定的，但是then中的回调函数是异步的，需要等到调用then的promise实例状态发生改变
            -then方法接受两个回调函数，分别处理成功promise实例和失败promise实例的逻辑
            -then接收的两个回调函数接收两个参数，分别是成功promise的值和失败promise的值

        then的返回值
            -then默认返回一个成功状态的promise实例，值是回调函数的返回值
            -当then中的回调函数返回一个promise实例的时候，则then方法的返回值，和这个promise实例保持一致
            -但then中有报错但是没有被处理的时候，这then直接返回失败的promise实例，值为错误信息
        */ 

        const p2 = p1.then((value) =>{
            console.log("成功",value);
        
        // console.aaa("123")
        
            const re = new Promise((resolve,reject) =>{
               console.log("开始请求B数据");
               try{
                   throw new Error("B错误")
                   setTimeout(() => {
                       console.log("B数据成功");
                       resolve("bbb")
                   }, 3000)
               } 
               catch (e){
                   reject(e.message)
               }
            })
        
            return re;
       
        })
        
        console.log("p2",p2);
    </script>
</body>
</html>